package genhandle

import (
	"fginTpl/fgin_grpc_gen/config"
	"fginTpl/fgin_grpc_gen/globals"
	"fginTpl/utils"
	"os"
	"os/exec"
	"path/filepath"
)

// 完整处理生成文件入口
func GenAll() {
	// 处理main文件
	GenMain()
	// 生成dockerfile文件
	GenDockerfile()
	// 生成plugs文件
	GenInitPlugs()
	// 生成utils文件
	GenUtils()
	// 生成服务方法
	GenServices()
	// 生成配置文件
	GenCfg()
	// proto文件
	GenPb()

	// 执行代码
	// 切换到pb目录下，生成grpc桩代码
	err := os.Chdir(filepath.Join(globals.BASEDIR, "./pb"))
	if err != nil {
		panic(err)
	}
	args := []string{"--go_out=.", "--go-grpc_out=.", "./" + config.ConfigData.ProjectName + "_pb.proto"}
	cmd := exec.Command("protoc", args...)
	cmd.Stdout = os.Stdout
	cmd.Stderr = os.Stderr
	err = cmd.Run()
	if err != nil {
		panic(err)
	}

	// 切换到保存的位置 执行项目初始化
	err = os.Chdir(globals.BASEDIR)
	if err != nil {
		panic(err)
	}
	// 检查go.mod文件是否存在
	if !utils.FileOrDirExists(filepath.Join(globals.BASEDIR, "./go.mod")) {
		// 执行 `go mod init` 命令
		cmd := exec.Command("go", "mod", "init", config.ConfigData.ProjectName)
		cmd.Stdout = os.Stdout
		cmd.Stderr = os.Stderr
		err = cmd.Run()
		if err != nil {
			panic(err)
		}
	}

	// 执行go mod tidy
	cmd = exec.Command("go", "mod", "tidy")
	cmd.Stdout = os.Stdout
	cmd.Stderr = os.Stderr
	err = cmd.Run()
	if err != nil {
		panic(err)
	}
}
